package cn.jbit.filter;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;
/**
 * 这个类是限制应用中的资源能否被访问的filter
 * @author Administrator
 * 先调用isAccessAllowed，如果返回的是true，
 * 则直接放行执行后面的filter和servlet，如果返回的是false，
 * 则继续执行后面的onAccessDenied方法，
 * 如果后面返回的是true则也可以有权限继续执行后面的filter和servelt。
 *
 */
public class PermsFilter extends AuthorizationFilter {

	@Override
	protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)
			throws Exception {
		// 获取主体对象
		Subject subject = getSubject(request, response);
		// 获取当前账户的权限列表
		String[] perms = (String[]) mappedValue;
		// 判断当前的用户是否有权限
		if (perms == null || perms.length == 0) {
			// 直接按照原有的校验规则校验
			return true;
		}
		for (String perm : perms) {
			if (subject.isPermitted(perm)) {
				// 只要一个符合就放行
				return true;
			}
		}

		return false;

	}

}
